草庐IT

c++ - Lua C++ 表迭代

全部标签

Python 迭代器——如何在新样式类中动态分配 self.next?

作为一些WSGI中间件的一部分,我想编写一个包装迭代器的python类,以在迭代器上实现关闭方法。当我尝试使用旧式类时,它工作正常,但当我使用新式类时,它会抛出TypeError。我需要做什么才能让它与新式类一起工作?例子:classIteratorWrapper1:def__init__(self,otheriter):self._iterator=otheriterself.next=otheriter.nextdef__iter__(self):returnselfdefclose(self):ifgetattr(self._iterator,'close',None)isnot

python:来自函数的迭代器

什么是idiomatic从函数创建无限迭代器的方法?例如fromitertoolsimportisliceimportrandomrand_characters=to_iterator(random.randint(0,256))print''.join(islice(rand_characters,100))会产生100个随机数 最佳答案 您想要一个不断产生值直到您停止请求新值的迭代器吗?简单地使用it=iter(function,sentinel)它为每个迭代步骤调用function(),直到结果==sentinel。因此,在您

iterator - 在 python 中快速迭代可迭代对象(不是列表)的前 n 项

我正在寻找一种pythonic方法来迭代可迭代项的第一个n项(upd:在常见情况下不是列表,至于列表,事情是琐碎的),并且尽可能快地执行此操作非常重要。这就是我现在的做法:count=0foriteminiterable:do_something(item)count+=1ifcount>=n:break对我来说似乎不太整洁。另一种方法是:foriteminitertools.islice(iterable,n):do_something(item)这看起来不错,问题是它是否足够快,可以与某些生成器一起使用?例如:pair_generator=lambdaiterable:iterto

python - 迭代元组列表

我正在寻找一种干净的方法来迭代元组列表,其中每个元组都是一对,例如[(a,b),(c,d)...]。最重要的是,我想更改列表中的元组。标准做法是避免在更改列表的同时迭代它,那么我应该怎么做?这就是我想要的:foriinrange(len(tuple_list)):a,b=tuple_list[i]#updateb'sdata#updatetuple_list[i]tobe(a,newB) 最佳答案 只需替换列表中的元组;您可以在遍历列表时更改列表,只要您避免添加或删除元素:fori,(a,b)inenumerate(tuple_li

python - 确定您在 python 循环中进行的迭代

基本上,我希望能够知道我何时在循环迭代中的第N个项目上。有什么想法吗?d={1:2,3:4,5:6,7:8,9:0}forxind:iflastitem:# 最佳答案 使用enumerate:#!/usr/bin/envpythond={1:2,3:4,5:6,7:8,9:0}#Ifyouwantanordereddictionary(andhavepython2.7/3.2),#uncommentthenextlines:#fromcollectionsimportOrderedDict#d=OrderedDict(sorted(

python - 有没有一种优雅的方法可以通过迭代循环 N 次列表(如 itertools.cycle 但限制循环)?

我想通过迭代器重复(N次)遍历列表,以免在内存中实际存储列表的N个副本。是否有一种内置或优雅的方法可以在不编写我自己的生成器的情况下执行此操作?理想情况下,itertools.cycle(my_list)会有第二个参数来限制它循环的次数……唉,没有这样的运气。 最佳答案 importitertoolsitertools.chain.from_iterable(itertools.repeat([1,2,3],5))Itertools是一个很棒的库。:) 关于python-有没有一种优雅的

python - 在不使用计数器变量的情况下每 n 次迭代做一些事情

我有一个包含100多个元素的可迭代列表。我想在每第10个可迭代元素之后做一些事情。我不想使用计数器变量。我正在寻找一些不包含计数器变量的解决方案。目前我是这样的:count=0foriinrange(0,len(mylist)):ifcount==10:count=0#dosomethingprinticount+=1有什么方法可以省略计数器变量吗? 最佳答案 forcount,elementinenumerate(mylist,1):#Startcountingfrom1ifcount%10==0:#dosomething使用en

python - 'numpy.float64' 对象不可迭代

我正在尝试迭代由numpy.linspace生成的值数组:slX=numpy.linspace(obsvX,flightX,numSPts)slY=np.linspace(obsvY,flightY,numSPts)forindex,pointinslX:yPoint=slY[index]arcpy.AddMessage(yPoint)这段代码在我办公室的电脑上运行良好,但今天早上我坐下来在家里用另一台机器工作,出现了这个错误:File"C:\temp\gssm_arcpy.1.0.3.py",line147,inAnalyzeSightLineforindex,pointinslX:

python - 在 python 中检测 dictionary.iteritems() 的最后一次迭代

在使用iteritems()遍历字典时,是否有一种简单的方法来检测最后一次迭代? 最佳答案 有一个丑陋的方法可以做到这一点:fori,(k,v)inenumerate(your_dict.iteritems()):ifi==len(your_dict)-1:#dospecialstuffhere但是你真的应该考虑一下你是否需要这个。我几乎可以肯定还有另一种方法。 关于python-在python中检测dictionary.iteritems()的最后一次迭代,我们在StackOverfl

python - 包括一个格式化的可迭代对象作为一个更大的格式化字符串的一部分

最近在写一个类时,我最初包含了一个__repr__方法,如下所示:return"{}({!r},{!r},{!r})".format(self.__class__.__name__,self.arg1,self.arg2,self.arg3)像那样重复“{!r}”片段感觉不对,如果我向此类添加更多参数,维护起来会很乏味。然而,我想到的更强大的替代方案也不会赢得任何优雅奖。以编程方式构建格式字符串:fmt="{}(%s)"%",".join(["{!r}"]*3)returnfmt.format(self.__class__.__name__,self.arg1,self.arg2,se